package cyou.breathe.core;

import com.alibaba.ttl.TransmittableThreadLocal;

import java.util.Optional;

/**
 * 用户上下文
 * @author: breathe
 * @createTime: 2025-06-16
 */
public final class UserContext {
    public static final ThreadLocal<UserInfoDTO> USER_THREAD_LOCAL = new TransmittableThreadLocal<>();

    public static void setUser(UserInfoDTO userInfo) {
        USER_THREAD_LOCAL.set(userInfo);
    }
    public static String getUserId() {
        UserInfoDTO userInfoDTO = USER_THREAD_LOCAL.get();
        return Optional
                .ofNullable(userInfoDTO)
                .map(UserInfoDTO::getUserId)
                .orElse(null);
    }
    public static String getUsername() {
        UserInfoDTO userInfoDTO = USER_THREAD_LOCAL.get();
        return Optional
                .ofNullable(userInfoDTO)
                .map(UserInfoDTO::getUsername)
                .orElse(null);
    }
    public static String getRealName() {
        UserInfoDTO userInfoDTO = USER_THREAD_LOCAL.get();
        return Optional
                .ofNullable(userInfoDTO)
                .map(UserInfoDTO::getRealName)
                .orElse(null);
    }
    public static String getToken() {
        UserInfoDTO userInfoDTO = USER_THREAD_LOCAL.get();
        return Optional
                .ofNullable(userInfoDTO)
                .map(UserInfoDTO::getToken)
                .orElse(null);
    }
    public static void removeUser() {
        USER_THREAD_LOCAL.remove();
    }
}
